
package sismed.negocio.fachada;

import java.util.LinkedList;
import java.util.List;

import sismed.exception.DAOException;
import sismed.fachada.IFachada;
import sismed.negocio.controle.ControleOperacoesExame;
import sismed.negocio.controle.ControleOperacoesMensagem;
import sismed.negocio.controle.ControleOperacoesReceitaMedica;
import sismed.negocio.controle.ControleOperacoesPessoa;
import sismed.negocio.modelo.AnalistaSistema;
import sismed.negocio.modelo.Enfermeiro;
import sismed.negocio.modelo.Exame;
import sismed.negocio.modelo.ExameHematologico;
import sismed.negocio.modelo.ExameParasitologico;
import sismed.negocio.modelo.ExameUrinalise;
import sismed.negocio.modelo.Farmaceutico;
import sismed.negocio.modelo.Medico;
import sismed.negocio.modelo.Mensagem;
import sismed.negocio.modelo.Paciente;
import sismed.negocio.modelo.Pessoa;
import sismed.negocio.modelo.ReceitaMedica;
import sismed.negocio.modelo.ResultadoHelmintos;


public class Fachada implements IFachada{
	private static Fachada instanciaUnica = null;
	private ControleOperacoesExame operacoesExame = new ControleOperacoesExame();
	private ControleOperacoesPessoa operacoesPessoa = new ControleOperacoesPessoa();
	
	private Fachada(){}
	
	public static Fachada getInstance(){
		if(instanciaUnica == null){
			instanciaUnica = new Fachada();
		}
		return instanciaUnica;
	}
	
	public void cadastrarPaciente(Paciente paciente){
		operacoesPessoa.cadastrarPaciente(paciente);
	}
	
	public void cadastrarMedico(Medico medico){
		operacoesPessoa.cadastrarMedico(medico);
	}
	
	public void cadastrarEnfermeiro(Enfermeiro enfermeiro){
		operacoesPessoa.cadastrarEnfermeiro(enfermeiro);
	}
	
	public void cadastrarFarmaceutico(Farmaceutico farmaceutico){
		operacoesPessoa.cadastrarFarmaceutico(farmaceutico);
	}
	
	public void cadastrarAnalistaSistema(AnalistaSistema analista){
		operacoesPessoa.cadastrarAnalistaSistema(analista);
	}
	
	
	public boolean CadastrarPaciente(String nome, String sexo, String CPF, String RG,
			String naturalidade, String raca, String estadoCivil, String nascimento,
			String profissao, String sangue, String plano, String doador, String endereco,
			String bairro, String municipio, String CEP, String estado, String pais, String login,
			String senha, String email)
	{
		
		
		return operacoesPessoa.addCadastroPaciente(nome, sexo, CPF, RG, naturalidade, raca,
				estadoCivil, nascimento, profissao, sangue, plano, doador, endereco, bairro,
				municipio, CEP, estado, pais, login, senha, email);
	}
	
	
	public boolean CadastrarMedico(String nome, String sexo, String especialidade, String crm, String CPF, String RG,
			String naturalidade, String raca, String estadoCivil, String nascimento,
			String profissao, String sangue, String plano, String doador, String endereco,
			String bairro, String municipio, String CEP, String estado, String pais, String login,
			String senha, String email)
	{
		
		return operacoesPessoa.addCadastroMedico(nome, sexo, especialidade, crm, CPF, RG, naturalidade, raca,
				estadoCivil, nascimento, profissao, sangue, plano, doador, endereco, bairro,
				municipio, CEP, estado, pais, login, senha, email);
	}
	
	
	public boolean CadastrarFarmaceutico(String nome, String sexo, String coren, String CPF, String RG,
			String naturalidade, String raca, String estadoCivil, String nascimento,
			String profissao, String sangue, String plano, String doador, String endereco,
			String bairro, String municipio, String CEP, String estado, String pais, String login,
			String senha, String email)
	{
		
		
		return operacoesPessoa.addCadastroFarmaceutico(nome, sexo, coren, CPF, RG, naturalidade, raca,
				estadoCivil, nascimento, profissao, sangue, plano, doador, endereco, bairro,
				municipio, CEP, estado, pais, login, senha, email);
	}
	
	
	public boolean CadastrarEnfermeiro(String nome, String sexo, String coren, String CPF, String RG,
			String naturalidade, String raca, String estadoCivil, String nascimento,
			String profissao, String sangue, String plano, String doador, String endereco,
			String bairro, String municipio, String CEP, String estado, String pais, String login,
			String senha, String email)
	{
		
		
		return operacoesPessoa.addCadastroEnfermeiro(nome, sexo, coren, CPF, RG, naturalidade, raca,
				estadoCivil, nascimento, profissao, sangue, plano, doador, endereco, bairro,
				municipio, CEP, estado, pais, login, senha, email);
	}
	
	public Pessoa recuperarPessoa(String idPessoa){
		return operacoesPessoa.recuperarPessoa(idPessoa);
	}
	
	
	
	public Pessoa login(String login, String senha) {
		return operacoesPessoa.login(login, senha);
	}
	
	
	public boolean enviarMensagem(Medico origem, Medico destino, String assunto, Paciente paciente,
			String conteudo, String data, String hora, String tipo) {
		// TODO Auto-generated method stub
		ControleOperacoesMensagem contOpMsg = new ControleOperacoesMensagem();
		return contOpMsg.addMensagem(origem, destino, assunto, paciente, conteudo, data, hora, tipo);
	}

	
	public Mensagem recuperarMensagem(String idMensagem) {
		// TODO Auto-generated method stub
		ControleOperacoesMensagem contOpMsg = new ControleOperacoesMensagem();
		
		return contOpMsg.getMensagem(idMensagem);
	}

	
	public List<Mensagem> recuperarListaMensagem(String crmMedico) {
		// TODO Auto-generated method stub
		ControleOperacoesMensagem contOpMsg = new ControleOperacoesMensagem();
				
		return contOpMsg.recuperarListaMensagem(crmMedico);
	}
	
	
	public boolean cadastrarReceita(String registro, Paciente paciente, String descricao, String receituario, Medico medico, String data) 
	{
		// TODO Auto-generated method stub
		ControleOperacoesReceitaMedica contOpMsg = new ControleOperacoesReceitaMedica();
		return contOpMsg.addReceitaMedica(registro, paciente, descricao, receituario, medico, data);
	}

	
	public ReceitaMedica recuperarReceitaMedica(int idReceitaMedica) {
		// TODO Auto-generated method stub
		ControleOperacoesReceitaMedica contOpReceita = new ControleOperacoesReceitaMedica();
		
		return contOpReceita.getReceitaMedica(idReceitaMedica);
	}

	
	public List<ReceitaMedica> recuperarListaReceitaMedicaPorMedico(String crmMedico) {
		// TODO Auto-generated method stub
		ControleOperacoesReceitaMedica contOpMsg = new ControleOperacoesReceitaMedica();
				
		return contOpMsg.recuperarListaReceitaMedicaPorMedico(crmMedico);
	}
	
	
	public List<ReceitaMedica> recuperarListaReceitaMedicaPorPaciente(String idPaciente) {
		
		ControleOperacoesReceitaMedica contOpMsg = new ControleOperacoesReceitaMedica();
				
		return contOpMsg.recuperarListaReceitaMedicaPorPaciente(idPaciente);
	}
	
	public List<ReceitaMedica> recuperarListaReceitaMedica(){
		ControleOperacoesReceitaMedica contOpMsg = new ControleOperacoesReceitaMedica();
		
		return contOpMsg.recuperarListaReceitaMedica();
	}

	
	public Exame recuperarExame( String idexame )  throws DAOException {
		ControleOperacoesExame contOpExame = new ControleOperacoesExame();
		return contOpExame.recuperarExame( idexame );
	}

	
	public List<Exame> recuperarExamesPorPaciente( int idpaciente ) throws DAOException{
		ControleOperacoesExame contOpExame = new ControleOperacoesExame();
		return contOpExame.recuperarExamesPorPaciente( idpaciente );
	}

	
	public List<Exame> recuperarExamesPorTipo( String tipo ) throws DAOException{
		ControleOperacoesExame operacoesExame = new ControleOperacoesExame();
		return operacoesExame.recuperarExamesPorTipo( tipo );
	}

	public void prescreverExameParasitologico(ExameParasitologico exame) throws DAOException{
		ExameParasitologico exameParasitologico = new ExameParasitologico( exame );
		try {
			operacoesExame.pescreverExameParasitologico( exameParasitologico );
		}
		catch ( DAOException e) {
			throw new DAOException(e);
		}
	}

	public void prescreverExameHematologico(Exame exame) throws DAOException{
		ExameHematologico exameHematologico = new ExameHematologico( exame );
		try {	
			operacoesExame.pescreverExameHematologico( exameHematologico );
		}
		catch ( DAOException e) {
			throw new DAOException(e);
		}
	}

	public void prescreverExameUrinalise(Exame exame) throws DAOException{
		ExameUrinalise exameUrinalise = new ExameUrinalise( exame );
		try {
			operacoesExame.pescreverExameUrinalise( exameUrinalise );
		}
		catch ( DAOException e) {
			throw new DAOException(e);
		}
		
	}

	public void atualizarExame(Exame exame) throws DAOException{
		try {
			operacoesExame.atualizarExame( exame );
		}
		catch ( DAOException e) {
			throw new DAOException(e);
		}
	}

	public LinkedList<Enfermeiro> recuperarListaEnfermeiros() {
		return null;
	}

	public List<Farmaceutico> recuperarListaFarmaceuticos() {
		return operacoesPessoa.recuperarListaFarmaceutico();
	}

	public List<Medico> recuperarListaMedicos() {
		return operacoesPessoa.recuperarListaMedico();
	}

	public List<Paciente> recuperarListaPacientes() {
		return operacoesPessoa.recuperarListaPaciente();
	}

	public List<Pessoa> recuperarListaPessoas() {
		return operacoesPessoa.recuperarListaPessoas();
	}

	public List<Exame> recuperarExamesPorFarmaceutico( int idfarmaceutico ) throws DAOException{
		return operacoesExame.recuperarExamesPorFarmaceutico( idfarmaceutico );
	}

	public List<Exame> recuperarExamesPorMedico( int idmedico ) throws DAOException{
		return operacoesExame.recuperarExamesPorMedico( idmedico );
	}

	public boolean atualizarPessoa( Pessoa pessoa, String id ) {
		return operacoesPessoa.atualizarPessoa( pessoa, id );
	}
	
	public boolean EditarPaciente(String id, String nome, String sexo, String CPF, String RG,
			String naturalidade, String raca, String estadoCivil, String nascimento,
			String profissao, String sangue, String plano, String doador, String endereco,
			String bairro, String municipio, String CEP, String estado, String pais, String login,
			String email)
	{
		// TODO Auto-generated method stub
		
		return operacoesPessoa.editarPaciente(id, nome, sexo, CPF, RG, naturalidade, raca,
				estadoCivil, nascimento, profissao, sangue, plano, doador, endereco, bairro,
				municipio, CEP, estado, pais, login, email);
	}
	
	public boolean EditarMedico(String id, String nome, String sexo, String especialidade, String CRM, String CPF, String RG,
			String naturalidade, String raca, String estadoCivil, String nascimento,
			String profissao, String sangue, String plano, String doador, String endereco,
			String bairro, String municipio, String CEP, String estado, String pais, String login,
			String email)
	{
		// TODO Auto-generated method stub
		
		return operacoesPessoa.editarMedico(id, nome, sexo, especialidade, CRM, CPF, RG, naturalidade, raca,
				estadoCivil, nascimento, profissao, sangue, plano, doador, endereco, bairro,
				municipio, CEP, estado, pais, login, email);
	}
	
	public boolean EditarEnfermeiro(String id, String nome, String sexo, String coren, String CPF, String RG,
			String naturalidade, String raca, String estadoCivil, String nascimento,
			String profissao, String sangue, String plano, String doador, String endereco,
			String bairro, String municipio, String CEP, String estado, String pais, String login,
			String email)
	{

		return operacoesPessoa.editarEnfermeiro(id, nome, sexo, coren, CPF, RG, naturalidade, raca,
				estadoCivil, nascimento, profissao, sangue, plano, doador, endereco, bairro,
				municipio, CEP, estado, pais, login, email);
	}
	
	public boolean EditarFarmaceutico(String id, String nome, String sexo, String crf, String CPF, String RG,
			String naturalidade, String raca, String estadoCivil, String nascimento,
			String profissao, String sangue, String plano, String doador, String endereco,
			String bairro, String municipio, String CEP, String estado, String pais, String login,
			String email)
	{

		return operacoesPessoa.editarFarmaceutico(id, nome, sexo, crf, CPF, RG, naturalidade, raca,
				estadoCivil, nascimento, profissao, sangue, plano, doador, endereco, bairro,
				municipio, CEP, estado, pais, login, email);
	}
	
	public boolean EditarAnalista(String id, String nome, String sexo, String coren, String CPF, String RG,
			String naturalidade, String raca, String estadoCivil, String nascimento,
			String profissao, String sangue, String plano, String doador, String endereco,
			String bairro, String municipio, String CEP, String estado, String pais, String login,
			String email)
	{

		return operacoesPessoa.editarAnalista(id, nome, sexo, coren, CPF, RG, naturalidade, raca,
				estadoCivil, nascimento, profissao, sangue, plano, doador, endereco, bairro,
				municipio, CEP, estado, pais, login, email);
	}
	
	public boolean AlterarSenha(String id, String senhaAtual, String senha1)
	{

		return operacoesPessoa.alterarSenha(id, senhaAtual, senha1);
	}

	public boolean excluirPessoa(String idPessoa) {
		return operacoesPessoa.excluirPessoa(Integer.parseInt(idPessoa));
	}
}
